// 对axios做一个二次封装
import axios from "axios"
import router from "@/router"
import { ElMessage } from "element-plus"

// axios.get('url',{params:""}) get请求搜索参数
// axios.post('url',请求体)
// axios.put('url',请求体)
// axios.patch('url',请求体)
// axios.delete('url')

// axios({
//   url: "",
//   method: "get",
//   params: {} //搜索参数
// })

// axios({
//   url: "",
//   method: "post",
//   data: {} //请求体对象
// })
// axios({
//   url: "",
//   method: "put", //patch
//   data: {} //请求体对象
// })

// axios({
//   url: "",
//   method: "delete"
// })

// --常用

// http://www.axios-js.com/zh-cn/docs/#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AE%9E%E4%BE%8B%E9%BB%98%E8%AE%A4%E5%80%BC

const instance = axios.create({
  // 统一的基本配置
  //   请求基地址
  baseURL: "http://localhost:3001",
  // 现在，在超时前，所有请求都会等待 60 秒
  timeout: 60000
})
// instance.defaults.timeout = 2500

// 在请求或响应被 then 或 catch 处理前拦截它们。
// 添加请求拦截器

// 请求前执行
instance.interceptors.request.use(
  function (config) {
    // debugger
    // 在发送请求之前做些什么
    // ***********
    // 请求之前判断本地是否有token ，有的 就根据接口文档要求 携带token
    let token = localStorage.getItem("token")
    if (token) {
      config.headers.token = token
    }

    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
// 服务器返回数据了
instance.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么
    // debugger
    if (response.data.code == 10119) {
      //token 无效---登录过期了
      ElMessage({
        message: response.data.message,
        type: "error"
      })
      //删除本地token
      localStorage.removeItem("token")
      // this.$router 不是在组件内部 不能用组件实例的属性
      router.push("/login")
    }
    return response
  },
  function (error) {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

// Alter defaults after instance has been created

// 以后所有使用instance对象发起的请求 都会在url中自动添加 基地址
//http://localhost:3001/admin/admin/logi
// instance.get("/admin/admin/logi")
// instance({ method: "get", url: "", params: {} })

export default instance
export { instance }
